﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Antlr;
using Antlr.Runtime;
using Antlr.Runtime.Tree;
using MathNet.Numerics.LinearAlgebra.Double;
using CudaTranslator;
using cudaMatrix;

namespace cudaTranslator
{
    class Program
    {
        static void Main(string[] args)
        {
            // otwarcie pliku z kodem - rozszerzenie .ctc ważne! - później zmienić na czytanie z cmd
            TextReader tr = new StreamReader("../../example.ctc");
            String input = tr.ReadToEnd();

            //wypisz kod
            //Console.WriteLine(input+"\n");

            //przygotowanie do parsowania
            ANTLRStringStream sStream = new ANTLRStringStream(input);
            CudaTranslatorLexer lexer = new CudaTranslatorLexer(sStream);
            CommonTokenStream tStream = new CommonTokenStream(lexer);            
            CudaTranslatorParser parser = new CudaTranslatorParser(tStream);
            
            //parsowanie
            CudaTranslatorParser.prog_return parseReturn = parser.prog();
            
            // tworzy drzewo
            CommonTree Tree = (CommonTree)parseReturn.Tree;

            //parsuje wejście
            if (args.Contains("-nvidia"))
                MatrixFactory.COMPUTER = ComputationHost.CUDA;
            else
                MatrixFactory.COMPUTER = ComputationHost.CPU;

            //tworzy klasę analizującą i zaczyna pracować
            TreeWalker walker = new TreeWalker(Tree, parser);
            walker.WalkAndAnalyse();
             

        }
    }
}
